# This module is very old and useless in this day and age!  It will be
# removed in a few years (ie, 2009 or so...)

import warnings
warnings.warn("The regcheck module has been pending deprecation since build 210",
	      category=PendingDeprecationWarning)

import win32con
import regutil
import win32api
import os
import sys


def CheckRegisteredExe(exename):
	try:
		os.stat(win32api.RegQueryValue(regutil.GetRootKey()  , regutil.GetAppPathsKey() + "\\" + exename))
#	except SystemError:
	except (os.error,win32api.error):
		print("Registration of %s - Not registered correctly" % exename)

def CheckPathString(pathString):
	for path in pathString.split(";"):
		if not os.path.isdir(path):
			return "'%s' is not a valid directory!" % path
	return None

def CheckPythonPaths(verbose):
	if verbose: print("Python Paths:")
	# Check the core path
	if verbose: print("\tCore Path:", end=' ')
	try:
		appPath = win32api.RegQueryValue(regutil.GetRootKey(), regutil.BuildDefaultPythonKey() + "\\PythonPath")
	except win32api.error as exc:
		print("** does not exist - ", exc.strerror)
	problem = CheckPathString(appPath)
	if problem:
		print(problem)
	else:
		if verbose: print(appPath)
	
	key = win32api.RegOpenKey(regutil.GetRootKey(), regutil.BuildDefaultPythonKey() + "\\PythonPath", 0, win32con.KEY_READ)
	try:
		keyNo = 0
		while 1:
			try:
				appName = win32api.RegEnumKey(key, keyNo)
				appPath = win32api.RegQueryValue(key, appName)
				if verbose: print("\t"+appName+":", end=' ')
				if appPath:
					problem = CheckPathString(appPath)
					if problem:
						print(problem)
					else:
						if verbose: print(appPath)
				else:
					if verbose: print("(empty)")
				keyNo = keyNo + 1
			except win32api.error:
				break
	finally:
		win32api.RegCloseKey(key)

def CheckHelpFiles(verbose):
	if verbose: print("Help Files:")
	try:
		key = win32api.RegOpenKey(regutil.GetRootKey(), regutil.BuildDefaultPythonKey() + "\\Help", 0, win32con.KEY_READ)
	except win32api.error as exc:
		import winerror
		if exc.winerror!=winerror.ERROR_FILE_NOT_FOUND:
			raise
		return
		
	try:
		keyNo = 0
		while 1:
			try:
				helpDesc = win32api.RegEnumKey(key, keyNo)
				helpFile = win32api.RegQueryValue(key, helpDesc)
				if verbose: print("\t"+helpDesc+":", end=' ')
				# query the os section.
				try:
					os.stat(helpFile )
					if verbose: print(helpFile)
				except os.error:
					print("** Help file %s does not exist" % helpFile)
				keyNo = keyNo + 1
			except win32api.error as exc:
				import winerror
				if exc.winerror!=winerror.ERROR_NO_MORE_ITEMS:
					raise
				break
	finally:
		win32api.RegCloseKey(key)

def CheckRegisteredModules(verbose):
	# Check out all registered modules.
	k=regutil.BuildDefaultPythonKey() + "\\Modules"
	try:
		keyhandle = win32api.RegOpenKey(regutil.GetRootKey(), k)
		print("WARNING: 'Modules' registry entry is deprectated and evil!")
	except win32api.error as exc:
		import winerror
		if exc.winerror!=winerror.ERROR_FILE_NOT_FOUND:
			raise
		return

def CheckRegistry(verbose=0):
	# check the registered modules
	if verbose and 'pythonpath' in os.environ:
		print("Warning - PythonPath in environment - please check it!")
	# Check out all paths on sys.path
	
	CheckPythonPaths(verbose)
	CheckHelpFiles(verbose)
	CheckRegisteredModules(verbose)
	CheckRegisteredExe("Python.exe")

if __name__=='__main__':
	if len(sys.argv)>1 and sys.argv[1]=='-q':
		verbose = 0
	else:
		verbose = 1
	CheckRegistry(verbose)
